package model

import (
	"fmt"
	"path/filepath"

	"github.com/BurntSushi/toml"
	kingpin "gopkg.in/alecthomas/kingpin.v2"
)

type Rec struct {
	ID uint64 `json:"id"`
	BM string `json:"bm"`
	S1 string `json:"s1"`
	D1 string `json:"d1"`
	D2 string `json:"d2"`
	D3 string `json:"d3"`
	D4 string `json:"d4"`
	D5 string `json:"d5"`
	D6 string `json:"d6"`
	D7 string `json:"d7"`
}
type Cloth struct {
	ID    uint64 `json:"id"`
	NAME  string `json:"name"`
	COLOR string `json:"color"`
}
type SRec struct {
	ID  uint64 `json:"id"`
	BM  string `json:"bm"`
	S1  string `json:"s1"`
	D1  string `json:"d1"`
	D2  string `json:"d2"`
	D3  string `json:"d3"`
	D4  string `json:"d4"`
	D5  string `json:"d5"`
	D6  string `json:"d6"`
	D7  string `json:"d7"`
	D8  string `json:"d8"`
	D9  string `json:"d9"`
	D10 string `json:"d10"`
	D11 string `json:"d11"`
}
type Ops struct {
	Ids []uint64 `json:"ids"`
	BMs []string `json:"bms"`
}

type Op struct {
	BM string `json:"bm"`
}
type Num struct {
	Pageno   int `json:"pageno"`
	Pagesize int `json:"pagesize"`
}

type RecHot struct {
	BM      string `json:"bm"`
	Rec     string `json:"rec"`
	HotNums string `json:"hotnums"`
	C       int    `json:"c"`
	C12     int    `json:"c12"`
	C20     int    `json:"c20"`
	C30     int    `json:"c30"`
}

type Cfgm struct {
	Version  string
	Boltdb   string
	Port     int
	R31url   string
	R31mark  string
	R31smark string
}

var (
	conf = kingpin.Flag("conf", "config file default conf/config.toml").Default("conf/config.toml").Short('c').String()
)
var Cfg Cfgm

func init() {
	kingpin.Version("0.0.0.1")
	kingpin.Parse()

	cfgpath, _ := filepath.Abs(*conf)
	if _, err := toml.DecodeFile(cfgpath, &Cfg); err != nil {
		return
	}
	Cfg.Boltdb = Substr(cfgpath, 0, len(cfgpath)-16) + Cfg.Boltdb
	fmt.Println(Cfg.Boltdb)
}

func Substr(str string, start, length int) string {
	rs := []rune(str)
	rl := len(rs)
	end := 0

	if start < 0 {
		start = rl - 1 + start
	}
	end = start + length

	if start > end {
		start, end = end, start
	}

	if start < 0 {
		start = 0
	}
	if start > rl {
		start = rl
	}
	if end < 0 {
		end = 0
	}
	if end > rl {
		end = rl
	}
	return string(rs[start:end])
}
